#ifndef LECTEURFONC_H_
#define LECTEURFONC_H_

#include "Symbole.h"
#include <vector>
#include "LecteurSymbole.h"
#include "TableSymboles.h"
#include "Arbre.h"
#include "LecteurPhraseAbstrait.h"

#include <stdlib.h>
#include <string>
using namespace std;

class LecteurFonction : public LecteurPhraseAbstrait {
public:
    LecteurFonction(LecteurSymbole *lectSymb, vector <LecteurPhraseAbstrait *>&vf);
    int getValeur(vector<int> & p);
    void genCode(fstream &f);
    inline int operator == (string ch) { return nom == ch; }
    inline unsigned getNbParam () { return parametres.size(); }
    inline string & getNom () { return nom; }
    inline vector<SymboleValue*> getParametres(){
        return parametres;
    }
    // renvoie vrai si nom=ch
    ////////////////////////////////////////////////////////////////////////////////
private:
    Noeud* instRetour();
    // Le nom (l'identificateur) de la fonction
    string nom;
    // vecteur contenant les paramètres
    vector<SymboleValue*>parametres;
    ////////////////////////////////////////////////////////////////////////////////
    Noeud* programme();
    // <programme> ::= fonction <variable> (<variable>{,<variable>}) <seqInst>
    //                 [<instRetour>] finfonc
};

#endif // LECTEURFONC_H_